package main

import (
	"fmt"
	"github.com/spf13/cobra"
	"github.com/spf13/pflag"
	"github.com/spf13/viper"
)

type temp struct {
	Name   string `mapstructure:"name"`
	Config string `mapstructure:"config"`
}

func main() {
	// 初始化 Cobra 命令行程序
	cmd := &cobra.Command{
		Use:   "hello",
		Short: "Say hello to someone",
		Run:   run,
	}

	// 设置 Pflag 标志
	name := pflag.String("name", "world", "name to say hello to")
	config := pflag.String("config", "", "config file")

	// 绑定 Pflag 标志到 Viper 配置
	viper.BindPFlags(pflag.CommandLine)

	temp_data := temp{}

	// 读取配置文件
	*config = "z_demo/demo11/config.yaml"
	if viper.GetString("config") != "" {
		viper.SetConfigFile(viper.GetString("config"))
		if err := viper.ReadInConfig(); err != nil {
			panic(err)
		}
		if err := viper.Unmarshal(&temp_data); err != nil {
			panic(err)
		}
	}

	// 执行 Cobra 命令行程序
	cmd.Execute()
	fmt.Println(temp_data)
	fmt.Println(*name, *config)
}

func run(cmd *cobra.Command, args []string) {
	// 从 Viper 配置中获取名字
	name := viper.GetString("name")

	// 输出问候语
	fmt.Printf("Hello, %s!\n", name)
}
